# -*- coding: utf-8 -*-
# @Time : 2025/10/19 19:19:53
# @Desc : js运行python函数
# @Author : Sean
# @File   : js_api.py
import getpass
import psutil


class JsApi:
    """
    @说明:js运行python的Api类
    @参数:
    @参数:
    @时间:2025/10/19 19:21:04
    @作者:Sean
    @返回:
    """

    _window = None  # 创建window窗口的对象
    _tray = None  # 托盘图标
    _title = None  # 程序标题

    def set_window(self, window, tray, title):
        """
        @说明:
        @参数:window 使用create_window的对象
        @参数:
        @时间:2025/10/19 19:21:25
        @作者:Sean
        @返回:
        """
        JsApi._tray = tray
        JsApi._window = window
        JsApi._title = title

    def minimize(self):
        """
        @说明:最小化窗口
        @参数:
        @参数:
        @时间:2025/10/21 09:52:48
        @作者:Sean
        @返回:
        """

        JsApi._window.minimize()

    def maximize(self):
        """
        @说明:最大化窗口
        @参数:
        @参数:
        @时间:2025/10/21 09:52:59
        @作者:Sean
        @返回:
        """

        JsApi._window.maximize()

    def restore(self):
        """
        @说明:还原窗口
        @参数:
        @参数:
        @时间:2025/10/21 09:53:10
        @作者:Sean
        @返回:
        """

        JsApi._window.restore()

    def close(self):
        """
        @说明:关闭窗口
        @参数:
        @参数:
        @时间:2025/10/21 09:53:24
        @作者:Sean
        @返回:
        """
        JsApi._tray.notify(JsApi._title, "我在这里哦")
        JsApi._window.hide()

    def open_file_dialog(
        self,
        directory="",
        multiple=False,
        fileTypes=["全部文件 (*.*)", "Excel表格 (*.xlsx;*.xls)"],
    ):
        """
        @说明:打开文件选择框 获取文件路径
        @参数:fileTypes = ['Excel表格 (*.xlsx;*.xls)']  要求必须是元组
        @参数:multiple  True 可多选  False 只选一个
        @时间:2025/10/21 10:44:49
        @作者:Sean
        @返回:
         window.pywebview.api.open_file_dialog('C:\\path', true, ['全部文件 (*.*)']).then(response => {
                console.log(response)
            })
        """
        import webview
        import os

        fileTypes = tuple(fileTypes)
        result = JsApi._window.create_file_dialog(
            dialog_type=webview.OPEN_DIALOG,
            directory=directory,
            allow_multiple=multiple,
            file_types=fileTypes,
        )
        resList = list()
        if result is not None:
            for res in result:
                filePathList = os.path.split(res)
                dir = filePathList[0]
                filename = filePathList[1]
                ext = os.path.splitext(res)[-1]
                resList.append(
                    {"filename": filename, "ext": ext, "dir": dir, "path": res}
                )
        return resList

    def get_current_user(self):
        """
        @说明:获取系统用户名
        @参数:
        @参数:
        @时间:2025/10/22 15:09:38
        @作者:Sean
        @返回:
        """

        return getpass.getuser()

    def get_memory(self):
        """
        @说明:获取内存信息
        @参数:
        @参数:
        @时间:2025/10/22 15:10:09
        @作者:Sean
        @返回:
        """

        return round(psutil.virtual_memory().total / 1024**3, 2)

    def get_disk(self):
        """
        @说明:获取磁盘信息
        @参数:
        @参数:
        @时间:2025/10/22 15:10:27
        @作者:Sean
        @返回:
        """
        total = 0
        for part in psutil.disk_partitions(all=False):  # all=False 跳过伪文件系统
            try:
                usage = psutil.disk_usage(part.mountpoint)
                total += usage.total
            except PermissionError:
                # 无权限访问时跳过
                continue
        return round(total / 1024**3, 2)

    def get_device_info(self):
        """
        @说明:获取设备信息
        @参数:
        @参数:
        @时间:2025/10/22 15:12:31
        @作者:Sean
        @返回:
        """
        memory = self.get_memory()
        disk = self.get_disk()
        current_user = self.get_current_user()
        return {
            "memory": str(memory) + "GB",
            "disk": str(disk) + "GB",
            "current_user": current_user,
        }
